package cn.androidlongs.study.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DataUtils {
    private DataUtils() {

    }


    private static class SingleDateUtil {
        private static DataUtils sDataUtils = new DataUtils();
    }

    public static DataUtils getInstance() {
        return SingleDateUtil.sDataUtils;
    }

    /**
     * 获取Calendar
     */
    private Calendar getCalendar() {
        return Calendar.getInstance();
    }

    /**
     * 获取Date
     */
    private Date getDate() {
        return new Date();
    }


    //—————————— —————————— —————————— —————————— —————————— —————————— —————————— —————————— ——————————

    public static String DEFAULT_DATE_FORMAT = "yyyy年MM月dd日";
    public static String DEFAULT_TIME_FORMAT = "yyyy年MM月dd日 HH : mm : ss";

    public static String DEFAULT_DATE_FORMAT2 = "yyyy-MM-dd";
    public static String DEFAULT_TIME_FORMAT2 = "yyyy-MM-dd HH : mm : ss";

    //—————————— —————————— —————————— —————————— —————————— —————————— —————————— —————————— ——————————


    /**
     * 格式化时间
     *
     * @param time long类型时间
     */
    public String formatTime(long time) {
        return formatTime(time, null);
    }

    /**
     * 格式化时间
     *
     * @param time   long类型时间
     * @param format 格式
     */
    public String formatTime(long time, String format) {
        if (format==null||format.equals("")) {
            format = DEFAULT_DATE_FORMAT;
        }
        //获取Date
        Date date = null;
        try {
            date = getDate();

            //设置时间
            date.setTime(time);
            //设置格式
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
            //格式化时间
            String timeString = simpleDateFormat.format(date);
            return timeString;
        } catch (Exception e) {
            return e.getMessage();
        }
    }


    //—————————— —————————— —————————— —————————— —————————— —————————— —————————— —————————— ——————————

    /**
     * 解析 String类型时间
     *
     * @param time String类型时间
     */
    public long pareTime(String time) {
        return pareTime(time, null);
    }

    /**
     * 解析 String类型时间
     *
     * @param time   String类型时间
     * @param format 解析格式
     */
    public long pareTime(String time, String format) {
	 if (format==null||format.equals("")) {
            format = DEFAULT_DATE_FORMAT;
        }
        try {
            //设置格式
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
            //格式化时间
            Date timeLongDate = simpleDateFormat.parse(time);
            return timeLongDate.getTime();
        } catch (Exception e) {
            return 0;
        }

    }

//—————————— —————————— —————————— —————————— —————————— —————————— —————————— —————————— ——————————

    //获取当前的时间
    public String getCurrentTime() {
        return getCurrentTime(null);
    }

    /**
     * 获取当前的时间
     *
     * @param formatString 时间格式
     */
    public String getCurrentTime(String format) {
	 if (format==null||format.equals("")) {
            format = DEFAULT_DATE_FORMAT;
        }
        //创建Date
        Date date = getDate();
        //格式化
        SimpleDateFormat formats = new SimpleDateFormat(format);
        return formats.format(date);
    }

    /**
     * 获取当前的时间
     *
     * @return long 毫秒
     */
    public long getCurrentTimes() {
        return getDate().getTime();
    }
//—————————— —————————— —————————— —————————— —————————— —————————— —————————— —————————— ——————————

    public int getCurrentYear() {
        return getCurrentYear(0);
    }

    public int getCurrentYear(int y) {
        //获取Calendar
        Calendar calendar = getCalendar();
        //设置
        calendar.add(Calendar.YEAR, y);

        return calendar.get(Calendar.YEAR);
    }

    public int getCurrentMon() {
        return getCurrentMon(0);
    }

    public int getCurrentMon(int m) {
        //获取Calendar
        Calendar calendar = getCalendar();
        //设置
        calendar.add(Calendar.MONTH, m);

        return calendar.get(Calendar.MONTH);
    }

    /**
     * 获取 日
     *
     * @return int 日
     */
    public int getCurrentDay() {
        return getCurrentDay(0);
    }

    /**
     * 获取 日
     *
     * @param d 在当前日期上添加的天数
     * @return int 日
     */
    public int getCurrentDay(int d) {
        //获取Calendar
        Calendar calendar = getCalendar();
        //设置
        calendar.add(Calendar.DAY_OF_MONTH, d);
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

}
